package com.example.demo.service;

import com.example.demo.model.Configuration;
import com.example.demo.repository.ConfigurationRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 配置服务类
 * 处理配置的业务逻辑
 */
@Service
@Slf4j
public class ConfigurationService {
    
    @Autowired
    private ConfigurationRepository configurationRepository;
    
    /**
     * 获取所有配置
     * @return 配置列表
     */
    public List<Configuration> getAllConfigurations() {
        log.debug("获取所有配置");
        return configurationRepository.findAll();
    }
    
    /**
     * 保存或更新配置
     * @param configuration 要保存的配置
     * @return 保存后的配置（包含ID）
     */
    public Configuration saveConfiguration(Configuration configuration) {
        log.info("保存配置: {}", configuration.getConfigName());
        // 保存配置的同时会级联保存所有字段
        return configurationRepository.save(configuration);
    }
    
    /**
     * 根据ID获取配置
     * @param id 配置ID
     * @return 配置信息，如果不存在返回null
     */
    public Configuration getConfigurationById(Long id) {
        return configurationRepository.findById(id).orElse(null);
    }
    
    /**
     * 删除配置
     * @param id 要删除的配置ID
     */
    public void deleteConfiguration(Long id) {
        // 由于配置了级联删除，删除配置时会自动删除相关的字段
        configurationRepository.deleteById(id);
    }
    
    /**
     * 更新配置
     * @param configuration 要更新的配置
     * @return 更新后的配置
     */
    public Configuration updateConfiguration(Configuration configuration) {
        // 先删除原有的字段
        Configuration existingConfig = getConfigurationById(configuration.getId());
        if (existingConfig != null && existingConfig.getFields() != null) {
            existingConfig.getFields().clear();
        }
        
        // 保存更新后的配置
        return configurationRepository.save(configuration);
    }
} 